iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
AI & Data

索引結構與機器學習的相遇系列 第 22

Day 22 - Simple Linear Regression 測試

  • 分享至 

  • xImage
  •  

今天我們要建置 Simple Linear Regression 模型,使用模型訓練並預測,我們實作的方式分兩種 : (1) scikit-learn 、(2) Keras

scikit-learn

包含許多機器學習、資料探勘演算法的軟件包,其中我們會使用裡面的 Linear Regression 函式庫去實踐,程式碼如下 :

from sklearn.linear_model import LinearRegression
import numpy as np

# x:自變數, y:因變數
x = np.array([1,2,3,4,5]).reshape(5,1)
y = np.array([2,4,6,8,10])

model=LinearRegression()
model.fit(x,y)
print('bias:',model.intercept_)
print('slope:',model.coef_)

Keras

深度學習神經網路套件,底層為Tensorflow,設計以更簡單、模組化的方式來建置模型。

我們使用梯度下降(Gradient Descent) 中的 隨機梯度下降(Stochastic Gradient Descent) ,找出誤差函數的最小值。

程式碼如下 :

from keras.models import Sequential
from keras.layers import Dense

x = np.linspace(1,1000,100).reshape(-1,1)                  # 隨機產生排序好的資料
y = crtCDF(x)

x = preprocessing.scale(x)                                 # 標準化: 零均值化

model = Sequential()
model.add(Dense(1, input_dim=1, activation="linear"))      # 簡單線性
sgd=keras.optimizers.SGD(lr=0.01)                          # 激勵函數: SGD
model.compile(loss="mse", optimizer=sgd, metrics=["mse"])
model.fit(x, y, epochs=100, batch_size=32, verbose=0)
pred_y = model.predict(x)

Test

Model寫完了,CDF函數有了,我將這兩個結合在一起就可以變成 最初始的Learned Index 拉!

分別測試兩種方法,將訓練完的結果與原本的 CDF 分布進行比較。

程式碼付這 Code

下面兩張圖可以瞭解,其實兩個方法的擬合結果差不多 :

https://ithelp.ithome.com.tw/upload/images/20201007/20129198tZg7Fcnt3o.pnghttps://ithelp.ithome.com.tw/upload/images/20201007/201291987hpNeGHOBw.png

目前只有單純使用單一個Model來預測資料位置,未加上Biased Binary Search 查詢策略,因為我們現在只需看 Model 擬合 CDF 資料的分布狀況。

除了可以使用線性回歸預測資料位置之外,我們還可以使用神經網路(NN),明天來簡單地介紹 NNㄅ !

https://ithelp.ithome.com.tw/upload/images/20201007/20129198t1W3fSDMRI.png


上一篇
Day 21 - Simple Linear Regression 介紹
下一篇
Day 23 - NN 介紹
系列文
索引結構與機器學習的相遇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言